package fiuba.algo3.vista;

import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

import org.jdom2.Document;
import org.jdom2.output.XMLOutputter;

import fiuba.algo3.juego.JuegoGPS;

public class VentanaDeCreacionDeUnUsuario implements ActionListener {

	private JFrame miFrame;
	private JButton listo;
	private JTextField nombreUsuario;
	private JPanel contentPane;
	private JuegoGPS miJuego;
	private JButton volver;

	VentanaDeCreacionDeUnUsuario(JuegoGPS unJuego, JFrame miFrame) {

		this.miFrame = miFrame;
		this.miJuego = unJuego;

		contentPane = new JPanel();
		this.miFrame.setContentPane(contentPane);
		contentPane.setLayout(null);

		JLabel nombre = new JLabel("Ingrese su nombre:");
		nombre.setBounds(200, 250, 150, 25);

		volver = new JButton("Volver");
		volver.setBounds(800, 500, 75, 25);
		volver.addActionListener(this);
		contentPane.add(volver);

		nombreUsuario = new JTextField();
		nombreUsuario.setBounds(360, 250, 150, 25);
		EventQueue.invokeLater(new Runnable() {

			   @Override
			     public void run() {
			         nombreUsuario.grabFocus();
			         nombreUsuario.requestFocus();//or inWindow
			     }
			});
		
		listo = new JButton("Listo");
		listo.setBounds(520, 250, 100, 30);

		JLabel titulo = new JLabel("Elija su nombre de usuario");
		titulo.setBounds(350, 175, 200, 30);

		contentPane.add(titulo);

		contentPane.add(nombre);
		contentPane.add(nombreUsuario);
		contentPane.add(listo);

		listo.addActionListener(this);
		nombreUsuario.addActionListener(this);

		this.miFrame.paintComponents(miFrame.getGraphics());
		miFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	@Override
	public void actionPerformed(ActionEvent e) {

		if (e.getSource() == volver) {
			new VentanaDeUsuarios(miJuego, miFrame);
		} 
		
		else if (nombreUsuario.getText().isEmpty()) {
			new VentanaAvisoUsuarioIncorrecto();

		} 
		
		else if ((e.getSource() == listo || e.getSource() == nombreUsuario) && !nombreUsuario.getText().isEmpty()) {
				if (miJuego.agregarNuevoJugador(nombreUsuario.getText())) {
					// Clase auxiliar para escuchar el evento de cerrado de la ventana
					
					Document doc = new Document(miJuego.serializar());
					try {
					XMLOutputter xmlOutput = new XMLOutputter();
					xmlOutput.output(doc, new FileWriter("juego.xml"));

					System.out.println("File Saved!");
					} catch (IOException io) {
					System.out.println(io.getMessage());
					}
					
					miJuego.setUsuarioActual(nombreUsuario.getText());
					new VentanaTutorial(miJuego, this.miFrame);
			} else
				new VentanaAvisoUsuarioIncorrecto();
		}
	}

}
